package cn.blnp.net.flowable.event.bound.cancel;

import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * <h3>边界事件-取消边界事件</h3>
 *
 * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
 * @version 1.0
 * @since 2025/5/9 11:11
 */
@Slf4j
@SpringBootTest
public class BoundCancelEvent {

    @Resource
    private RepositoryService repositoryService;
    @Resource
    private RuntimeService runtimeService;
    @Resource
    private TaskService taskService;

    /**
     *  <p>
     *      取消边界事件依附在事务子流程的边界上，在事务取消时被触发。当取消边界事件被触发时，首先<s>中断当前作用域中的所有活动的执行</s>，然后开始执行所有在这个事务的作用域内的活动的补偿边界事件。
     *   <b>补偿是同步执行的，意味着边界事件会一直等待到补偿事件完成，才会离开事务子流程</b>。当补偿完成后，事务子流程会沿着取消边界事件的外出顺序流继续流转。具体事件定义格式如下：
     *   <pre>
     *       {@code
     *          <process id="cancelBoundaryEventProcess">
     *              <!-- 定义事务子流程 -->
     *              <transaction id="transactionSubProcess" name="事务子流程">
     *                  <!-- 省略事务子流程元素-->
     *              </transaction>
     *              <!-- 定义边界事件 -->
     *              <boundaryEvent id="cancelBoundaryEvent" name="取消边界事件" attachedToRef="transactionSubProcess" >
     *                  <cancelEventDefinition />
     *              </boundaryEvent>
     *          </process>
     *       }
     *   </pre>
     *  </p>
     *  <br/>
     *  <h2 style="color:red;">注意事项：</h2>
     *  <hr/>
     *  <p>
     *      取消边界事件使用时需要注意以下3点：
     *      <ol>
     *          <li>每个事务子流程只能有一个取消边界事件；</li>
     *          <li><b>如果事务子流程包含内嵌子流程，那么当取消边界事件被触发时，补偿只会触发已经结束的子流程；</b></li>
     *          <li>如果取消边界事件所依附的事务子流程配置为多实例，那么一旦其中一个流程实例触发取消边界事件，所有的流程实例都会触发取消边界事件。</li>
     *      </ol>
     *  </p>
     **/
    @Test
    public void test() {

    }
}
